/**
 * @BaseUR		请求域名
 * @HEADERTOKENNAME		请求token键名
 * @Bearer		是否需要在token前拼接 Bearer字符
 * */
class Request {
	constructor({
		BaseUR = '',
		HEADERTOKENNAME = 'token',
		Bearer = false
	} = {}) {
		this['BaseUR'] = BaseUR;
		this['HEADERTOKENNAME'] = HEADERTOKENNAME;
		this['Bearer'] = Bearer;
	}
	
	// URL拼接方法
	url(value) {
		return /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-.\/?%&=]*)?/.test(value)
	}

	Request(config = {}) {
		// 是否存在url
		try {
			if (!url) {
				throw '请求缺少URL参数';
			}
		} catch (e) {
			throw new Error(e);
		};
		// 创建请求头对象
		let header = {}
		// 请类型
		config['method'] = config['method'] ? config['method'].toUpperCase() : 'GET';
		// 正常情况下
		// GET请求使用 'application/x-www-form-urlencoded'
		// POST请求使用 'application/json'
		// 列外情况下会与之相反,所以将Content-Type写为根据手动传输或根据请求类型判断，目前只写入GET与POST后续可扩展
		header['Content-Type'] = header['Content-Type'] ? header['Content-Type'] : this.method(
			config['method']);
		config['header'] = header;
		// url判断，部分项目中不仅要调用本公司的接口，还要调用其他方的接口，这时候就会不使用当前公司的url端口所以将端口拼接写活
		if (!this.url(config['url'])) {
			url = `${this['BaseUR']}${config['url']}`
		};
		
		config['complete'] = (infor) => {
			this.responseintercept(infor);
		}
		let Requestconfig = this.Requestintercept(config);
		console.log(Requestconfig);
		// 请求体
		return new Promise((resolve, reject) => {
			uni.request(Requestconfig)
		})
	}

	// 请求拦截
	Requestintercept(config) {
		// 请求时所携带的token名称目前会存在 Authorization/ token
		config['header'][this['HEADERTOKENNAME']] = `${this['Bearer']?'Bearer':''}`;
		return config
	}

	// 响应拦截
	responseintercept(infor) {

	}

	// 请求类型过滤
	method(method) {
		switch (method) {
			case 'GET':
				return 'application/x-www-form-urlencoded';
			case 'POST':
				return 'application/json';
		}
	}
}




const request = new Request({
	BaseUR: "http://119.3.107.201:8100/prod-api/", // 测试
});

export default request;
